对包含命名空间 xmlns:wcm 和 xmlns:xsi 的 XML 进行正确编组和解组
今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《对包含命名空间 xmlns:wcm 和 xmlns:xsi 的 XML 进行正确编组和解组》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!
我正在尝试处理 windows autounattend.xml 文件的读取和写入,以便创建和修改它们。我无法正确封送和解封 xmlns:wcm 和 xmlns:xsi 属性。
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowspe">
<component name="microsoft-windows-international-core-winpe" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<setupuilanguage>
<uilanguage>en-us</uilanguage>
</setupuilanguage>
<inputlocale>0409:00000409</inputlocale>
<systemlocale>en-us</systemlocale>
<uilanguage>en-us</uilanguage>
<uilanguagefallback>en-us</uilanguagefallback>
<userlocale>en-us</userlocale>
</component>
<component name="microsoft-windows-setup" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<diskconfiguration>
<disk wcm:action="add">
<diskid>0</diskid>
<willwipedisk>true</willwipedisk>
<createpartitions>
<!-- windows re tools partition -->
<createpartition wcm:action="add">
<order>1</order>
<type>primary</type>
<size>300</size>
</createpartition>
<!-- system partition (esp) -->
<createpartition wcm:action="add">
<order>2</order>
<type>efi</type>
<size>100</size>
</createpartition>
<!-- microsoft reserved partition (msr) -->
<createpartition wcm:action="add">
<order>3</order>
<type>msr</type>
<size>128</size>
</createpartition>
<!-- windows partition -->
<createpartition wcm:action="add">
<order>4</order>
<type>primary</type>
<extend>true</extend>
</createpartition>
</createpartitions>
<modifypartitions>
<modifypartition wcm:action="add">
<order>1</order>
<partitionid>1</partitionid>
<label>winre</label>
<format>ntfs</format>
<typeid>de94bba4-06d1-4d40-a16a-bfd50179d6ac</typeid>
</modifypartition>
<modifypartition wcm:action="add">
<order>2</order>
<partitionid>2</partitionid>
<label>system</label>
<format>fat32</format>
</modifypartition>
<modifypartition wcm:action="add">
<order>3</order>
<partitionid>3</partitionid>
</modifypartition>
<modifypartition wcm:action="add">
<order>4</order>
<partitionid>4</partitionid>
<label>windows</label>
<letter>c</letter>
<format>ntfs</format>
</modifypartition>
</modifypartitions>
</disk>
</diskconfiguration>
<imageinstall>
<osimage>
<installto>
<diskid>0</diskid>
<partitionid>4</partitionid>
</installto>
<installtoavailablepartition>false</installtoavailablepartition>
</osimage>
</imageinstall>
<userdata>
<productkey>
<key></key>
<willshowui>never</willshowui>
</productkey>
<accepteula>true</accepteula>
<fullname>admin</fullname>
<organization></organization>
</userdata>
</component>
</settings>
<settings pass="offlineservicing">
<component name="microsoft-windows-lua-settings" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<enablelua>false</enablelua>
</component>
</settings>
<settings pass="generalize">
<component name="microsoft-windows-security-spp" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<skiprearm>1</skiprearm>
</component>
</settings>
<settings pass="specialize">
<component name="microsoft-windows-international-core" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<inputlocale>0409:00000409</inputlocale>
<systemlocale>en-us</systemlocale>
<uilanguage>en-us</uilanguage>
<uilanguagefallback>en-us</uilanguagefallback>
<userlocale>en-us</userlocale>
</component>
<component name="microsoft-windows-security-spp-ux" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<skipautoactivation>true</skipautoactivation>
</component>
<component name="microsoft-windows-sqmapi" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<ceipenabled>0</ceipenabled>
</component>
<component name="microsoft-windows-shell-setup" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<computername>-pc</computername>
<productkey></productkey>
</component>
</settings>
<settings pass="oobesystem">
<component name="microsoft-windows-shell-setup" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs"
xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
<autologon>
<password>
<value></value>
<plaintext>true</plaintext>
</password>
<enabled>true</enabled>
<username>admin</username>
</autologon>
<oobe>
<hideeulapage>true</hideeulapage>
<hideoemregistrationscreen>true</hideoemregistrationscreen>
<hideonlineaccountscreens>true</hideonlineaccountscreens>
<hidewirelesssetupinoobe>true</hidewirelesssetupinoobe>
<networklocation>home</networklocation>
<skipuseroobe>true</skipuseroobe>
<skipmachineoobe>true</skipmachineoobe>
<protectyourpc>1</protectyourpc>
</oobe>
<useraccounts>
<localaccounts>
<localaccount wcm:action="add">
<password>
<value></value>
<plaintext>true</plaintext>
</password>
<description></description>
<displayname>admin</displayname>
<group>administrators</group>
<name>admin</name>
</localaccount>
</localaccounts>
</useraccounts>
<registeredorganization></registeredorganization>
<registeredowner>admin</registeredowner>
<disableautodaylighttimeset>false</disableautodaylighttimeset>
<firstlogoncommands>
<synchronouscommand wcm:action="add">
<description>control panel view</description>
<order>1</order>
<commandline>reg add "hkey_current_user\software\microsoft\windows\currentversion\explorer\controlpanel" /v startuppage /t reg_dword /d 1 /f</commandline>
<requiresuserinput>true</requiresuserinput>
</synchronouscommand>
<synchronouscommand wcm:action="add">
<order>2</order>
<description>control panel icon size</description>
<requiresuserinput>false</requiresuserinput>
<commandline>reg add "hkey_current_user\software\microsoft\windows\currentversion\explorer\controlpanel" /v allitemsiconview /t reg_dword /d 0 /f</commandline>
</synchronouscommand>
<synchronouscommand wcm:action="add">
<order>3</order>
<requiresuserinput>false</requiresuserinput>
<commandline>cmd /c wmic useraccount where name="admin" set passwordexpires=false</commandline>
<description>password never expires</description>
</synchronouscommand>
</firstlogoncommands>
<timezone>central standard time</timezone>
</component>
</settings>
</unattend>
我尝试使用 xml.name、xml.attr 和字符串,但没有成功
const (
// A generic XML header suitable for use with the output of Marshal.
Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
WCM = `http://schemas.microsoft.com/WMIConfig/2002/State`
XSI = `http://www.w3.org/2001/XMLSchema-instance`
)
type UserData struct {
AcceptEula bool `xml:"AcceptEula"`
FullName string `xml:"FullName"`
Organization string `xml:"Organization"`
ProductKey struct {
Key string `xml:"Key"`
WillShowUI string `xml:"WillShowUI"`
} `xml:"ProductKey"`
}
type OSImage struct {
XMLName xml.Name `xml:"OSImage"`
InstallToAvailablePartition bool `xml:"InstallToAvailablePartition"`
InstallToDiskID uint32 `xml:"InstallTo>DiskID"`
InstallToPatitionID uint32 `xml:"InstallTo>ParitionID"`
}
type ImageInstall struct {
XMLName xml.Name `xml:"ImageInstall"`
OSImage OSImage `xml:"OSImage"`
}
type CreatePartition struct {
XMLName xml.Name `xml:"CreatePartition"`
Order uint32 `xml:"Order"`
Type string `xml:"Type"`
Size uint64 `xml:"Size,omitempty"`
Extend bool `xml:"Extend,omitempty"`
Action xml.Attr `xml:"action,attr"`
}
type ModifyPartition struct {
XMLName xml.Name `xml:"ModifyPartition"`
Order uint32 `xml:"Order"`
PartitionID uint32 `xml:"PartitionID"`
Label string `xml:"Label,omitempty"`
Format string `xml:"Format,omitempty"`
TypeID string `xml:"TypeID,omitempty"`
Letter string `xml:"Letter,omitempty"`
Action xml.Attr `xml:"action,attr"`
}
type Disk struct {
XMLName xml.Name `xml:"Disk"`
Action xml.Attr `xml:"action,attr"`
DiskID uint32 `xml:"DiskID"`
WillWipeDisk bool `xml:"WillWipeDisk"`
CreatePartitions []*CreatePartition `xml:"CreatePartitions>."`
ModifyPartitions []*ModifyPartition `xml:"ModifyPartitions>."`
}
type DiskConfiguration struct {
XMLName xml.Name `xml:"DiskConfiguration"`
Disks []*Disk `xml:"Disk"`
}
type SetupUILanguage struct {
XMLName xml.Name `xml:"SetupUILanguage"`
UILanguage *UILanguage `xml:"UILanguage"`
}
type UserLocale struct {
XMLName xml.Name `xml:"UserLocale"`
Value string `xml:",chardata"`
}
type InputLocale struct {
XMLName xml.Name `xml:"InputLocale"`
Value string `xml:",chardata"`
}
type SystemLocale struct {
XMLName xml.Name `xml:"SystemLocale"`
Value string `xml:",chardata"`
}
type UILanguage struct {
XMLName xml.Name `xml:"UILanguage"`
Value string `xml:",chardata"`
}
type UILanguageFallback struct {
XMLName xml.Name `xml:"UILanguageFallback"`
Value string `xml:",chardata"`
}
type EnableLUA struct {
XMLName xml.Name `xml:"EnableLUA"`
Value bool `xml:",chardata"`
}
type SkipRearm struct {
XMLName xml.Name `xml:"SkipRearm"`
Value int32 `xml:",chardata"`
}
type SkipAutoActivation struct {
XMLName xml.Name `xml:"SkipAutoActivation"`
Value bool `xml:",chardata"`
}
type CEIPEnabled struct {
XMLName xml.Name `xml:"CEIPEnabled"`
Value int32 `xml:",chardata"`
}
type ComputerName struct {
XMLName xml.Name `xml:"ComputerName"`
Value string `xml:",chardata"`
}
type ProductKey struct {
XMLName xml.Name `xml:"ProductKey"`
Value string `xml:",chardata"`
}
type Password struct {
XMLName xml.Name `xml:"Password"`
Value string `xml:"Value"`
PlainText bool `xml:"PlainText"`
}
type AutoLogon struct {
XMLName xml.Name `xml:"AutoLogon"`
Enabled bool `xml:"Enabled"`
Username string `xml:"Username"`
Password Password `xml:"Password"`
}
type OOBE struct {
XMLName xml.Name `xml:"OOBE"`
HideEULAPage bool `xml:"HideEULAPage,omitempty"`
HideOEMRegistrationScreen bool `xml:"HideOEMRegistrationScreen,omitempty"`
HideOnlineAccountScreens bool `xml:"HideOnlineAccountScreens,omitempty"`
HideWirelessSetupInOOBE bool `xml:"HideWirelessSetupInOOBE,omitempty"`
NetworkLocation string `xml:"NetworkLocation,omitempty"`
SkipUserOOBE bool `xml:"SkipUserOOBE,omitempty"`
SkipMachineOOBE bool `xml:"SkipMachineOOBE,omitempty"`
ProtectYourPC int32 `xml:"ProtectYourPC,omitempty"`
}
type LocalAccount struct {
XMLName xml.Name `xml:"LocalAccount"`
Action xml.Attr `xml:"action,attr"`
Password Password `xml:"Password"`
Description string `xml:"Description"`
DisplayName string `xml:"DisplayName"`
Group string `xml:"Group"`
Name string `xml:"Name"`
}
type LocalAccounts struct {
XMLName xml.Name
LocalAccount []*LocalAccount `xml:"LocalAccount"`
}
type UserAccounts struct {
XMLName xml.Name `xml:"UserAccounts"`
LocalAccounts LocalAccounts `xml:"LocalAccounts"`
}
type RegisteredOrganization struct {
XMLName xml.Name `xml:"RegisteredOrganization"`
Value string `xml:",chardata"`
}
type RegisteredOwner struct {
XMLName xml.Name `xml:"RegisteredOwner"`
Value string `xml:",chardata"`
}
type DisableAutoDaylightTimeSet struct {
XMLName xml.Name `xml:"DisableAutoDaylightTimeSet"`
Value bool `xml:",chardata"`
}
type CommandLine struct {
XMLName xml.Name `xml:"CommandLine"`
Value string `xml:",innerxml"`
}
type SynchronousCommand struct {
XMLName xml.Name `xml:"SynchronousCommand"`
Order uint32 `xml:"Order"`
Description string `xml:"Description"`
RequiresUserInput bool `xml:"RequiresUserInput"`
CommandLine CommandLine `xml:"CommandLine"`
}
type FirstLogonCommands struct {
XMLName xml.Name `xml:"FirstLogonCommands"`
SynchronousCommand []*SynchronousCommand `xml:"SynchronousCommand"`
}
type TimeZone struct {
XMLName xml.Name `xml:"TimeZone"`
Value string `xml:",chardata"`
}
type Component struct {
XMLName xml.Name `xml:"component"`
Name string `xml:"name,attr"`
ProcessorArchitecture string `xml:"processorArchitecture,attr"`
PublicKeyToken string `xml:"publicKeyToken,attr"`
Language string `xml:"language,attr"`
VersionScope string `xml:"versionScope,attr"`
// optional compontents
SetupUILanguage *SetupUILanguage `xml:"SetupUILanguage"`
UserLocale *UserLocale `xml:"UserLocale"`
InputLocale *InputLocale `xml:"InputLocale"`
SystemLocale *SystemLocale `xml:"SystemLocale"`
UILanguage *UILanguage `xml:"UILanguage"`
UILanguageFallback *UILanguageFallback `xml:"UILanguageFallback"`
DiskConfiguration *DiskConfiguration `xml:"DiskConfiguration,omitempty"`
ImageInstall *ImageInstall `xml:"ImageInstall,omitempty"`
UserData *UserData `xml:"UserData,omitempty"`
EnableLUA *EnableLUA `xml:"EnableLUA,omitempty"`
SkipRearm *SkipRearm `xml:"SkipRearm,omitempty"`
ProductKey *ProductKey `xml:"ProductKey,omitempty"`
ComputerName *ComputerName `xml:"ComputerName,omitempty"`
SkipAutoActivation *SkipAutoActivation `xml:"SkipAutoActivation,omitempty"`
CEIPEnabled *CEIPEnabled `xml:"CEIPEnabled,omitempty"`
AutoLogon *AutoLogon `xml:"AutoLogon,omitempty"`
OOBE *OOBE `xml:"OOBE,omitempty"`
UserAccounts *UserAccounts `xml:"UserAccounts"`
RegisteredOrganization *RegisteredOrganization `xml:"RegisteredOrganization,omitempty"`
RegisteredOwner *RegisteredOwner `xml:"RegisteredOwner,omitempty"`
DisableAutoDaylightTimeSet *DisableAutoDaylightTimeSet `xml:"DisableAutoDaylightTimeSet,omitempty"`
FirstLogonCommands *FirstLogonCommands `xml:"FirstLogonCommands,omitempty"`
TimeZone *TimeZone `xml:"TimeZone,omitempty"`
}
type Settings struct {
XMLName xml.Name `xml:"settings"`
Pass string `xml:"pass,attr"`
Components []*Component `xml:"component"`
}
type Unattend struct {
XMLName xml.Name `xml:"unattend"`
XMLNS xml.Attr `xml:"xmlns,attr"`
Settings []*Settings `xml:"settings"`
}
正确答案
xmlns:wcm 和 xmlns:xsi 并不是真正的属性,它们是经过特殊处理的。您的 xml 既没有 wcm 和 xsi 架构中的元素也没有属性,因此它们将被删除。为什么你的代码中需要它们?
如果您确实需要它们,您可以将以下字段添加到 component 结构中:
attr []xml.attr `xml:",any,attr"`
xml.Unmarshal documentation says:
如果 xml 元素具有先前规则未处理的属性,并且结构体具有包含“,any,attr”的关联标记的字段,则 unmarshal 会在第一个此类字段中记录该属性值。
这里是一个例子:https://go.dev/play/p/tGDh5Ay1kZW
func main() {
var u unattend
err := xml.unmarshal([]byte(document), &u)
if err != nil {
log.fatal(err)
}
for _, a := range u.settings[0].components[0].attr {
fmt.printf("unmatched attributes: %s:%s = %s\n", a.name.space, a.name.local, a.value)
}
}
输出:
unmatched attributes: xmlns:wcm = http://schemas.microsoft.com/wmiconfig/2002/state unmatched attributes: xmlns:xsi = http://www.w3.org/2001/xmlschema-instance
注意 1。此解决方案的缺点是:它仅处理 中的额外属性。但 xmlns:xxx 属性可以出现在任何元素中。一般情况下,您应该在数据模型的所有结构中添加 attr 数组。
注2.属性xmlns:wcm和xmlns:xsi不包含任何业务逻辑。他们没有提供有关设置和组件的信息。你真的需要它们吗?
注释 3. 绝对不需要将这些属性命名为 xmlns:wcm 和 xmlns:xsi。这只是一种常见的做法。 xml 文档可以将它们命名为 xmlns:foo 和 xmlns:bar - 这是完全有效的。即使值 "http://schemas.microsoft.com/wmiconfig/2002/state" 和 "http://www.w3.org/2001/xmlschema-instance" 也没有任何意义。它们可以是任何字符串,唯一的要求是匹配 URI format。 urn:microsoft:wmi-config:2002:state 与 http://schemas.microsoft.com/wmiconfig/2002/state 一样有效
解析 component 中的这些属性非常具体,对于在其他元素中或使用其他后缀或值声明这些属性的其他有效 xml 文档可能会失败。
更新
编组工作未按预期进行。 xml.marshal 专门处理 xmlns 命名空间,并将 attr 的 xmlns:wcm 和 xmlns:xsi 转换为命名空间 _xmlns
<component name="microsoft-windows-security-spp" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" language="neutral" versionscope="nonsxs" xmlns:_xmlns="xmlns" _xmlns:wcm="http://schemas.microsoft.com/wmiconfig/2002/state" _xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> ... </component>
解决方法是对属性使用特殊类型:
type xmlnsattr struct {
name xml.name
value string
}
func (a xmlnsattr) label() string {
if a.name.space == "" {
return a.name.local
}
if a.name.local == "" {
return a.name.space
}
return a.name.space + ":" + a.name.local
}
func (a *xmlnsattr) unmarshalxmlattr(attr xml.attr) error {
a.name = attr.name
a.value = attr.value
return nil
}
func (a xmlnsattr) marshalxmlattr(name xml.name) (xml.attr, error) {
return xml.attr{
name: xml.name{
space: "",
local: a.label(),
},
value: a.value,
}, nil
}
此类型通过构造一个属性并将命名空间嵌入到本地名称中来实现这一点。领域
attr []xml.attr `xml:",any,attr"`
正确解码/编码 xmlns:xxx 属性
示例:https://go.dev/play/p/VDofREl5nf1
输出:
Unmatched attributes: xmlns:wcm = http://schemas.microsoft.com/WMIConfig/2002/State
Unmatched attributes: xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance
<unattend>
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</component>
...
</settings>
</unattend>以上就是《对包含命名空间 xmlns:wcm 和 xmlns:xsi 的 XML 进行正确编组和解组》的详细内容,更多关于的资料请关注golang学习网公众号!
时间范围内数组元素的标准化方法
- 上一篇
- 时间范围内数组元素的标准化方法
- 下一篇
- 为什么在 Goland (IDEA) 中 Go 源代码显示为灰色?如何恢复正常显示?
-
- Golang · Go问答 | 1年前 |
- 在读取缓冲通道中的内容之前退出
- 139浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 戈兰岛的全球 GOPRIVATE 设置
- 204浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何将结构作为参数传递给 xml-rpc
- 325浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何用golang获得小数点以下两位长度?
- 478浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何通过 client-go 和 golang 检索 Kubernetes 指标
- 486浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 将多个“参数”映射到单个可变参数的习惯用法
- 439浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 将 HTTP 响应正文写入文件后出现 EOF 错误
- 357浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 结构中映射的匿名列表的“复合文字中缺少类型”
- 352浏览 收藏
-
- Golang · Go问答 | 1年前 |
- NATS Jetstream 的性能
- 101浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何将复杂的字符串输入转换为mapstring?
- 440浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 相当于GoLang中Java将Object作为方法参数传递
- 212浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何确保所有 goroutine 在没有 time.Sleep 的情况下终止?
- 143浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3353次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3564次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3594次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4717次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3968次使用
-
- GoLand调式动态执行代码
- 2023-01-13 502浏览
-
- 用Nginx反向代理部署go写的网站。
- 2023-01-17 502浏览
-
- Golang取得代码运行时间的问题
- 2023-02-24 501浏览
-
- 请问 go 代码如何实现在代码改动后不需要Ctrl+c,然后重新 go run *.go 文件?
- 2023-01-08 501浏览
-
- 如何从同一个 io.Reader 读取多次
- 2023-04-11 501浏览

