package main
import "fmt"
func main() {
fmt.Println("hello world")
}1234567

数据类型简单速览
| 数据类型 | 基本数据类型 | 复合数据类型 | 值传递 | 引用传递 |
|---|---|---|---|---|
| int整数 | Y | N | Y | N |
| float浮点 | Y | N | Y | N |
| string字符串 | Y | N | Y | N |
| bool布尔 | Y | N | Y | N |
| array数组 | N | Y | Y | N |
| slice切片 | N | Y | N | Y |
| map集合 | N | Y | N | Y |
| function函数 | N | Y | Y | N |
| pointer指针 | N | Y | Y | N |
| struct结构体 | N | Y | Y | N |
| interface接口 | N | Y | Y | N |
| channel管道 | N | Y | Y | N |
基本使用
package main
import "fmt"
func main() {
var flg bool = true
fmt.Printf("flg的数据类型是%T,值是%t\n",flg,flg)
var num int = 100
fmt.Printf("num的数据类型是%T,值是%d\n",num,num)
var userName string = "zhangsan"
fmt.Printf("userName的数据类型是%T,值是%s\n",userName,userName)
}123456789101112

值传递验证,布尔型
package main
import "fmt"
func main() {
var flg bool = true
fmt.Println("before:",flg)
change(flg)
fmt.Println("after:",flg)
}
func change(flg bool) {
flg = false
}1234567891011121314

咱这是快速入门,不搞那些什么int64,int32啥的,有无符号啥的,先横向学,别纵向钻牛角给自己挖坑,最后忘了自己要学什么。
值传递验证,以int型为例
package main
import "fmt"
func main() {
var num int = 100
fmt.Println("before:",num)
change(num)
fmt.Println("after:",num)
}
func change(num int) {
num = 1000
}1234567891011121314

值传递验证,字符串
package
main
import “fmt”
func
main() {
var
str string = “abc”
fmt.Println(“before:”,str)
change(str)
fmt.Println(“after:”,str)
}
func
change(str string) {
str
= “edf”
}

a) 数组基本使用
package main
import "fmt"
func main() {
// 数组的创建及赋值
var addr = [3]string{"北京", "天津", "南京"}
// 数组值的修改
addr[1] = "苏州"
// 获取数组的容量和长度
fmt.Printf("数组的长度是%d,容量是%d\n",len(addr),cap(addr))
// 数组的遍历
for i := 0; i < len(addr); i++ {
fmt.Println(addr[i])
}
// 数组的遍历 range方式
for i, v := range addr {
fmt.Printf("[%d]---[%s]\n",i,v)
}
}1234567891011121314151617181920
b)值传递验证,
数组
package main
import "fmt"
func main() {
var arr = [3]int{11,22,33}
fmt.Println("before:",arr)
change(arr)
fmt.Println("after:",arr)
}
func change(arr [3]int) {
arr[1] = 222
}1234567891011121314

切片是动态数组类似java的ArrayList
基本使用
a) 切片是两倍扩容
package main
import "fmt"
func main() {
// 切片的创建
var addr []string
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
// 切片中添加数据
addr = append(addr, "张三")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
addr = append(addr, "李四")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
addr = append(addr, "王五")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
addr = append(addr, "赵六")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
addr = append(addr, "阿七")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
fmt.Printf("addr的数据类型是%T",addr)
}123456789101112131415161718192021
b)
切片的遍历
package main
import "fmt"
func main() {
// 切片的创建
var addr []string
// 切片中添加数据
addr = append(addr, "张三")
addr = append(addr, "李四")
addr = append(addr, "王五")
addr = append(addr, "赵六")
addr = append(addr, "阿七")
fmt.Printf("切片的长度是%d,容量是%d\n",len(addr),cap(addr))
// 更改指定位置的数据
addr[1] = "我是李四亲戚"
// 切片遍历
for i, v := range addr {
fmt.Printf("[%d]->[%s]\n",i,v)
}
}123456789101112131415161718192021
c)
切片数据的截取
package main
import "fmt"
func main() {
// 创建切片
var nums = []int{11,22,33,44,55}
fmt.Println(nums)
// 获取第二到尾部的所有数据
fmt.Println("-------获取第二到尾部的所有数据-------")
new_nums := nums[1:]
fmt.Println(new_nums)
fmt.Println(nums)
// 获取从开头到倒数第二个元素的所有数据
fmt.Println("-------获取从开头到倒数第二个元素的所有数据-------")
new_nums = nums[:3]
fmt.Println(new_nums)
// 获取从第二个到第四个元素的所有数据(前闭后开)
fmt.Println("-------获取从第二个到第四个元素的所有数据(前闭后开)-------")
new_nums = nums[1:4]
fmt.Println(new_nums)
}1234567891011121314151617181920212223
d)
引用传递验证,切片
package main
import "fmt"
func main() {
// 创建切片
var nums = []int{11,22,33}
fmt.Println("before:",nums)
change(nums)
fmt.Println("after:",nums)
}
func change(nums []int) {
nums[1] = 222
}123456789101112131415

值传递验证,结构体
package main
import "fmt"
func main() {
stu := Student{name:"zhangsan", age:18}
fmt.Println("before:",stu)
change(stu)
fmt.Println("after:",stu)
}
type Student struct {
name string
age int
}
func change(stu Student) {
stu.age = 28
}12345678910111213141516171819

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30239065/viewspace-2716690/ ,如需转载,请注明出处,否则将追究法律责任。