go语言基本语法注意事项
- rune类型,go语言独有,go字符本身采用unicode编码,rune相当于32int占用4个字节代表一个unicode字符。
- […]int{1,2,3} 代表一个[3]int的数组,go语言的数组是固定长度的。[…]是通过数组初始化的值来计算数组长度。
- []int{1,2,3} 代表一个 slice(切片) go中的切片是可变长的
- go中的大些字母开头的函数,是可以对外声明可供外部访问
进阶章节
- new与make关键字的区别。 new类似c++的new,可以创建一个类型的实力,并返回对象的指针。而make只针对slice,map,channel三种类型。
- struct匿名字段,这个声明的时候有一点一定要注意,每个属性不要以逗号结尾,因为平时写json写习惯了,如果下面由,号结尾则会出意外问题
struct {
T1 ← 字段名字是 T1
*T2 ← 字段名字是 T2
P.T3 ← 字段名字是 T3
x,y int ←字段名字是x和y
}
- 字符串转换成[]byte数组,格式比较特殊[]byte(s)
- 自定义列举的例子其实文章并没有讲全,完全的例子可以看 https://go.dev/play/p/QCS1yvFabA
package main
import "fmt"
func main() {
const (
Enone = 0
Eio = 2
Einval = 5
)
a := [...]string{Enone: "no error", Eio: "Eio", Einval: "invalid argument"}
s := []string{Enone: "no error", Eio: "Eio", Einval: "invalid argument"}
m := map[int]string{Enone: "no error", Eio: "Eio", Einval: "invalid argument"}
fmt.Println(a)
fmt.Println(s)
fmt.Println(m)
}
接口章节
- go语言的接口就是方法的集合
- 不管什么类型都可以转换成空接口interface{} 类似java语言的Object
- switch对类型判断的特殊用法
func f(p I) {
switch t:=p.(type) {
case int: p.(int)
......
}
}
并发章节
- gorouting go语言的一种并发机制。不同于线程,gorouting占用率更低。 触发的形式是 go 函数()
- channel 初始化方法 make(chan int) 代表这个channel可以接受int
遇到的问题
- mac系统如果定义个组件提供其他的程序调用,其路径不要包含中文,如果包含中文会go install不成功,其他系统无此问题