结构体

和c一样
package main import "fmt" type Books struct { title string author string
subject string book_id int } func main() { // 创建一个新的结构体 fmt.Println(Books{"Go
语言", "www.runoob.com", "Go 语言教程", 6495407}) // 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程",
book_id: 6495407}) // 忽略的字段为 0 或 空 fmt.Println(Books{title: "Go 语言", author:
"www.runoob.com"}) } {Go 语言 www.runoob.com Go 语言教程 6495407} {Go 语言
www.runoob.com Go 语言教程 6495407} {Go 语言 www.runoob.com 0}
结构体指针,函数传参
package main import "fmt" type Books struct { title string author string
subject string book_id int } func main() { var Book1 Books /* Declare Book1 of
type Book */ var Book2 Books /* Declare Book2 of type Book */ /* book 1 描述 */
Book1.title = "Go 语言" Book1.author = "www.runoob.com" Book1.subject = "Go 语言教程"
Book1.book_id = 6495407 /* book 2 描述 */ Book2.title = "Python 教程" Book2.author
= "www.runoob.com" Book2.subject = "Python 语言教程" Book2.book_id = 6495700 /* 打印
Book1 信息 */ printBook(&Book1) /* 打印 Book2 信息 */ printBook(&Book2) } func
printBook( book *Books ) { fmt.Printf( "Book title : %s\n", book.title)
fmt.Printf( "Book author : %s\n", book.author) fmt.Printf( "Book subject :
%s\n", book.subject) fmt.Printf( "Book book_id : %d\n", book.book_id) } Book
title : Go 语言 Book author : www.runoob.com Book subject : Go 语言教程 Book book_id
: 6495407 Book title : Python 教程 Book author : www.runoob.com Book subject :
Python 语言教程 Book book_id : 6495700
切片

和py一样。
package main import "fmt" func main() { var numbers []int printSlice(numbers)
/* 允许追加空切片 */ numbers = append(numbers, 0) printSlice(numbers) /* 向切片添加一个元素 */
numbers = append(numbers, 1) printSlice(numbers) /* 同时添加多个元素 */ numbers =
append(numbers, 2,3,4) printSlice(numbers) /* 创建切片 numbers1 是之前切片的两倍容量*/
numbers1 := make([]int, len(numbers), (cap(numbers))*2) /* 拷贝 numbers 的内容到
numbers1 */ copy(numbers1,numbers) printSlice(numbers1) } func printSlice(x
[]int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) } /* len=0 cap=0
slice=[] len=1 cap=1 slice=[0] len=2 cap=2 slice=[0 1] len=5 cap=6 slice=[0 1 2
3 4] len=5 cap=12 slice=[0 1 2 3 4] */
range

range 关键字用于 for
循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回
key-value 对。
package main import "fmt" func main() { //这是我们使用range去求一个slice的和。使用数组跟这个很类似
nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num }
fmt.Println("sum:", sum)
//在数组上使用range将传入index和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。
for i, num := range nums { if num == 3 { fmt.Println("index:", i) } }
//range也可以用在map的键值对上。 kvs := map[string]string{"a": "apple", "b": "banana"} for
k, v := range kvs { fmt.Printf("%s -> %s\n", k, v) }
//range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。 for i, c := range
"go" { fmt.Println(i, c) } }
 
sum: 9 index: 1 a -> apple b -> banana 0 103 1 111
map

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:
/* 声明变量,默认 map 是 nil */ var map_variable map[key_data_type]value_data_type /*
使用 make 函数 */ map_variable := make(map[key_data_type]value_data_type)
如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
package main import "fmt" func main() { var countryCapitalMap
map[string]string /*创建集合 */ countryCapitalMap = make(map[string]string) /*
map插入key - value对,各个国家对应的首都 */ countryCapitalMap [ "France" ] = "巴黎"
countryCapitalMap [ "Italy" ] = "罗马" countryCapitalMap [ "Japan" ] = "东京"
countryCapitalMap [ "India " ] = "新德里" /*使用键输出地图值 */ for country := range
countryCapitalMap { fmt.Println(country, "首都是", countryCapitalMap [country]) }
/*查看元素在集合中是否存在 */ capital, ok := countryCapitalMap [ "American" ]
/*如果确定是真实的,则存在,否则不存在 */ /*fmt.Println(capital) */ /*fmt.Println(ok) */ if (ok)
{ fmt.Println("American 的首都是", capital) } else { fmt.Println("American 的首都不存在")
} } France 首都是 巴黎 Italy 首都是 罗马 Japan 首都是 东京 India 首都是 新德里 American 的首都不存在
注:删除:delete(countryCapitalMap, "France")

语言类型转换

类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go 语言类型转换基本格式如下:
type_name(expression)
type_name 为类型,expression 为表达式。

如float32(5)等。

接口实例
package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone
struct { } func (nokiaPhone NokiaPhone) call() { fmt.Println("I am Nokia, I can
call you!") } type IPhone struct { } func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!") } func main() { var phone Phone
phone = new(NokiaPhone) phone.call() phone = new(IPhone) phone.call() }

在上面的例子中,我们定义了一个接口Phone,接口里面有一个方法call()。然后我们在main函数里面定义了一个Phone类型变量,并分别为之赋值为NokiaPhone和IPhone。然后调用call()方法,输出结果如下:
I am Nokia, I can call you! I am iPhone, I can call you!
 

技术
©2019-2020 Toolsou All rights reserved,
(精华)2020年8月13日 C#基础知识点 windform实现双色球Vue开发小技巧SpringBoot JpaRepository 数据库增删改查Centos7 下mysql8.0的安装以及修改初始密码;pytorch之ResNet18(对cifar10数据进行分类准确度达到94%)(精华)2020年7月12日 webpack 常见插件的使用迷宫的最短路径之BFS算法(python实现)(精华)2020年7月21日 ASP.NET Core 全局过滤器的使用实验11-1-6 指定位置输出字符串 (20 分)前端向后台传值的5种方式总结