Pythonneer学习golang

基本

小结:golang 原则能少定义类型就少定义类型(所以很多时候类型在后),让编译器推导类型 变量定义:


var a = 100

字符串定义


"hello, world"

单引号不是包围的不是字符串,只是一个int32

数组定义(注意初始化使用了{):


var a = [10]int{1,2,3,4,5,6,7,8,9,10}

关联数组定义:


m = make(map[string]int)

结构定义:


type persion struct {
	name string
}

函数定义:


func add(x int, y int) int {
}

for 使用:


for ; ; {
}



for k,v := range m {
}



for {
}

select 与 chan 与 default


break goto 的降低版

中级

作用域

可以重新定义一个变量名相同的变量

错误处理

golang 倾向使用一个独立、明确的返回值来传递错误信息。 也就是类似c语言!

errors.New


import "errors"


func f1() (int, error) {
	return 1, errors.New("hello")
}
func main(){
	v, e := f1()
	if e != nil {
		fmt.Println(v)
	}
}

通道

在python中相当于队列,可以使用包(比如queue,threading safe)实现 golang 这个内置到语言上实现

定义通道(考虑是否使用缓存)

messages = make(chan string)

放 messages <- “buffered” 取 msg <- messages

通道有趣的事

  • 使用通道做定时器
  • 使用通道做打点器
  • 使用通道进行同步
  • close chan for range chan

attend

  • atomic in go
  • Mutex

检查通道是否成功获取数据


if elem, ok := <-dataChan; ok {

单向通道主要用作函数参数,规约 <-chan chan<-

select 与通道,通道与超时

defer

defer 相当于python with 的使用,不过with with ,golang 实现要使用func func defer等

变量作用域

每个括号都有作用域 := 初始化运算符

公共私有

golang 通过名字的首字母大小写决定,大写为公有,小写为私有

重要技巧

  • 查变量的类型 reflect.TypeOf(a)) ~ python type

常用包

  • strings 字符串处理 如大小写转换,重点包含Split,可以分割字符串

常用代码片

字符串分割


	s := "a\nb\nc\n"
	for i,v:= range strings.Split(s, "\n"){
		fmt.Println(i,v)
	}

相关名称

  • 并发字典, 可参考https://github.com/gopcp/example.v2的相关内容.

工具使用

goland 编译并运行注意的问题

运行不成功,定义缺失,一般来说是运行类型与GOPATH设置不当所致,可以这样判断, go run main.go 定缺失,尝试go build ,然后再run,如果成功,就要在goland进行相应该设置run kind Directory

Loading Disqus comments...
Table of Contents