网络工程师的Golang之路 -- Go表达式(Map、结构体)

相城娱乐新闻网 2025-09-06

fmt.Println(switch1) fmt.Println(len(switch1)) switch1["model"] = "C9300" switch1["CPU"] = "19.0" fmt.Println(switch1)} 移除偏移量对

在Go中会我们用于delete()算子来移除map中会都的偏移量对,delete()算子中会都要来作两个表达式,第一个是推选map的表达式名,第二个是要被移除的既有学键,这中会都我们用于delete(switch1, "SN")来移除表达式switch1中会都的"SN":"12345abcde"这个偏移量对:

package mainimport "fmt"func main() { switch1 := map[string]string{ "SN": "12345abcde", "CPU": "25.1", "version": "11.1", "port": "48", } fmt.Println(switch1) fmt.Println(len(switch1)) delete(switch1, "SN") fmt.Println(switch1) fmt.Println(len(switch1))} Nil Map

Map也有零最大值,其零最大值为nil,零最大值map也叫nil map。留意nil map和一个很难任何偏移量对的机map不是一个基本概念,我们不必对nil map替换成任何偏移量对,否则应用程序但会分崩离析,但是我们可以对机map替换成偏移量对,并不一定如下:

package mainimport "fmt"func main() { test_map := map[string]int{} //书面声明一个机map test_map["test"] = 1 //为机map替换成偏移量对 fmt.Println("test_map:", test_map) //到这一步很难任何问题 test_map = nil //将map转换为nil map test_map["test"] = 1 //试图为nil map替换成偏移量对,这中会都但会致使应用程序分崩离析}

对机map替换成偏移量对很难任何问题,但是一旦试图对nil map替换成偏移量对时应用程序随即分崩离析。

用make()创设map

除了用来创设内外皮内外,make()也可以用来创设机map(和通过make()情况创设机内外皮一样,用make()也情况创设机map),并不一定如下:

package mainimport "fmt"func main() { switch1 := make(map[string]string) //用make创设一个机map fmt.Println(switch1) switch1["port"] = "48" switch1["version"] = "11.1" fmt.Println(switch1)}

这中会都我们用make()算子创设了一个既有学键和最大值内外为字符的机map,并将它codice_给表达式switch1,随后我们手动为该map替换成了"port":"48"和"version":"11.1"两台偏移量对。

验证指定的偏移量对究竟假定于map中会

在map中会以variable["key_value"]的表达方式换取偏移量时,实际上但会前往两个最大值:一个是既有学键也就是说的最大值,一个是布尔最大值,其中会布尔最大值的作用是用来辨别既有学键究竟假定,如果假定则前往true,不假定则前往false(既有学键不假定的时候,既有学键也就是说的最大值为零最大值)。我们可以通过双codice_(two-value assignment)的表达方式来换取这两个最大值,从而辨别我们有兴趣的既有学键究竟假定于我们有兴趣的map中会,并不一定如下:

package mainimport "fmt"func main() { switch1 := make(map[string]int) //留意这中会都既有学键的种类几乎为字符,但是最大值的种类几乎是字符,而是幂 fmt.Println(switch1) v, ok := switch1["port"] //双codice_,表达式v推选既有学键也就是说的最大值,表达式ok用来辨别既有学键"port"究竟假定于switch1这个map中会 fmt.Println(v, ok) // 因为swtich1为机map,因此v的最大值为0(幂的零最大值),ok为false,暗示"port"这个既有学键不假定 switch1["port"] = 48 //向switch1中会都替换成"port":48这个偏移量对 v, ok = switch1["port"] //之后双codice_ fmt.Println(v, ok) //此时v为48,ok为true,暗示"port"这个既有学键假定}

如果你说我不想其实既有学键究竟假定于map中会,我不关心既有学键也就是说的最大值是什么的话,可以用词组"_"来做表达式名,替推选达式v,即将v, ok := switch["port"]写就_, ok := switch["port"],并不一定如下:

package mainimport "fmt"func main() { switch1 := make(map[string]int) fmt.Println(switch1) _, ok := switch1["port"] //双codice_时,用于"_"来作为第一个表达式,暗示综观varaibale["key-value"]前往的第一个最大值 fmt.Println(ok) //当表达式名为"_"时,几乎须要用于它 switch1["port"] = 48 _, ok = switch1["port"] //同理 fmt.Println(ok) //同理}

在Go第二语言中会,很多算子但会前往两个最大值(典型Python中会辞典的items()算子),用于"_"做表达式名来屏蔽掉自己不有兴趣的最大值的方法在双codice_的情况很惯用,上面的章节但会多次来作。

结构上本体重要基本概念

相信很多学习Go第二语言到这中会都的Netdevops读者不禁有一个或许:Go中会的变量、内外皮、map统统都情况支持独立的数据集结构,一个变量或内外皮中会都的元素要嘛全部是字符,要嘛全部是幂、浮点数、布尔最大值等等,一个map中会都的既有学键和最大值也是同样的道理,这点和Python中会都的此表和辞典相比是不是显得想像中不灵活了?要用责怪,Go中会的结构上本体(struct)就能刷新这样的限制。

下面在《变量、内外皮》一章中会都说是到内外皮的sliceHeader时我们早已提过了结构上本体的基本概念。简单点来说,结构上本体可以让我们将一组数据集集合起来,以便我们都能更为加捷径地操作这些数据集。每个数据集又由URL(field)和其也就是说的数据集结构构成,最重要的是每个URL也就是说的数据集结构相互之间可以只不过不一样。除此以内外,我们还可以通过结构上本体根据我们自己的须要来自度量一个全在此之后数据集结构(一个结构上本体就是一个在此之后数据集结构)。正因如此,在Go中会我们用于type这个关既有学键词来度量结构上本体,并不一定如下:

type Router struct{ Hostname string IP_address string Port int CPU_utilization float64 Power_on bool}

这中会都我们度量了一个称之为router的结构上本体(也就是创设了一个称之为router的数据集结构),该结构上本体纸制含Hostname、IP_address、Port、CPU_utilization、Power_on总计五个URL,每个URL又分别也就是说字符、幂、64位浮点数、布尔最大值等数据集结构,用来描述一个链路。

用于结构上本体

创设了结构上本体后,接下来我们将它codice_给两个表达式router1和router2,看看怎样用于结构上本体:

package mainimport "fmt"type router struct { Hostname string IP_address string Port int CPU_utilization float64 Power_on bool}func main() { router1 := router{"R1", "192.168.2.11", 8, 11.1, true} //将接结构上本体router"举例来说既有"给表达式router1 router2 := router{"R2", "192.168.2.12", 8, 22.2, false} //将接结构上本体router"举例来说既有"给表达式router2 fmt.Println(router1) fmt.Println(router2) fmt.Println("Router1的主机名:", router1.Hostname) fmt.Println("Router1的IP地址:", router1.IP_address) fmt.Println("Router2的接口用于量:", router2.Port) fmt.Println("Router2的CPU用量:", router2.CPU_utilization) fmt.Println("Router1的设备究竟开启:", router2.Power_on)}

这中会都我们将结构上本体router“举例来说既有”给了router1和router2。可以看得出Go中会的结构上本体和Python的类相似,虽然Go第二语言本身并不是程序设计的编程第二语言,但是也能明白典型Python那样将一个类“举例来说既有”的效果。这中会都的结构上本体router就像Python的类一样是一个抽象的常量,而router1和router2就典型结构上本体router的举例来说(instance)。

留意:举例来说要求将结构上本体写在main()或者其他自度量算子的角落,这样把结构上本体放在简而言之(global)的位置的诱因是到时方便它们在同一个Golang纸制一个大被其他的应用程序调用。不过如果你确认整个纸制一个大只有这一个应用程序,结构上本体不但会“对内外用于”,那将结构上本体写在main()或者其他自度量算子一个大也是可以的。

用new()将结构上本体codice_给表达式

用new()将结构上本体codice_给表达式和用make()创设内外皮、map一样,我们都不必将结构上本体URL的初始表达式扣除给表达式,并不一定如下:

package mainimport "fmt"type router struct { Hostname string IP_address string Port int CPU_utilization float64 Power_on bool}func main() { router1 := new(router) //用于new()将结构上本体router"举例来说既有"给router1 fmt.Println(router1)}

这中会都留意都只:

用new()将结构上本体codice_给表达式后,因为不必实体化每个结构上本体URL的初始最大值,所以所有URL的最大值为零最大值,即这中会都的Simon{ 0 0 false}。和make()算子创设的内外皮、map即为该内外皮、map本身不一样,new()算子前往的最大值并不是结构上本体本身,而是指向该结构上本体的堆栈,所以这中会都我们可以想到fmt.Println(router1)的时候可以想到{ 0 0 false}的下面多了一个Simon,这个Simon推选的就是堆栈,关于堆栈的学问我们但会在后文中会说是到。

接下来我们将router1的各项URL做增添:

package mainimport "fmt"type router struct { Hostname string IP_address string Port int CPU_utilization float64 Power_on bool}func main() { router1 := new(router) //用于new()将结构上本体router"举例来说既有"给router1 fmt.Println(router1) router1.Hostname = "R1" router1.IP_address = "192.168.2.11" router1.Port = 8 router1.CPU_utilization = 11.1 router1.Power_on = true fmt.Println(router1)}。

湖北皮肤病医院地址
成都妇科病治疗费用
宁波看白癜风去哪家医院好
贵州男科检查哪家医院好
武汉看白癜风哪家医院比较好
肝癌中晚期能活多久一般
钇90效果如何
钇90微球治疗在哪家医院能做
Y90树脂微球
支气管炎咳嗽有痰怎么办
相关阅读

全国新增英美确诊病例45例!广西37例,百色全员居家隔离

综艺 2025-10-27

据国家卫健委消息,2月底6日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告导入发病病唯79唯。其中境内外读取病唯34唯(广东21唯,上海8唯,北京1唯,浙江1唯,潮汕1唯,山东1唯

LAMOST挖掘出一个“星系果蔬园”

音乐 2025-10-27

从左到右依次是黄绿栗子类星体、柠檬类星体和紫葡萄类星体。(图片缺少:SDSS) 近期,之浙江大学国内星象台牵头之外的单位的分析工作团队在LAMOST(郭守敬望几倍镜)一

老人碰到在河边,两只狗狗竟全程守护在旁边,而且他们还互不认识!

资讯 2025-10-27

QQ号mengchongmeng 此前,柬埔寨网友Ake路过一条洛小河时 突然辨认出后面有两只猴子猴子 似乎在守着什么东西 等到她走近一

不能不门票最低的大城市,许多知名景点不超10元,免费景点更是不少

时尚 2025-10-27

首日,是游览花费里头不可避免的一个大项,毕竟参观名胜往往是旅途里头的关键性章节。于是,同类名胜里头,首日相对高于的往往人气变得高;有些名胜为了带给变得多的客人,还搞起了特价票、早鸟票等等。因此,

柳州新增56例本土确诊

资讯 2025-10-27

7日傍晚,记者从广西壮族自治区新冠肺炎疫情防控新闻媒体发布会意识到,自2月初6日16时至7日12时,广西壮族自治区新增本土确诊患者56则有。a href="http:www.qm1

友情链接