本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 变量定义
package main
import "fmt" //goland会帮我们自动导入程序中使用的包
func main() {
//变量定义: var
//常量定义: const
//01-先定义变量,再赋值 var 变量名 数据类型
var name string
name = "duke" //Ctrl + Alt +l 可以快速格式化代码
var age int
age = 20
fmt.Println("name:", name)
fmt.Printf("name is :%s, %d\n", name, age)
//02 定义时直接赋值
var gender = "man"
fmt.Println("gender:", gender)
//03 定义直接赋值,使用自动推导 (最常用的)
address := "北京"
fmt.Println("address:", address)
//灰色部分表示形参
test(10, "str")
//04-平行赋值
i, j := 10, 20 //同时定义两个变量
fmt.Println("变换前==》 i:", i, ", j:", j)
i, j = j, i
fmt.Println("变换后==》i:", i, ", j:", j)
}
func test(a int, b string) {
fmt.Println(a)
fmt.Println(b)
}
基础数据类型:
int,int8 int16, int32, int64
uint8 ... uint64
float32
float64
true/false
2. 自增语法
c语言:i++, i--, --i, ++i
go语言:i++, i--, 没有--i,++i, 自增语法必须单独一行
package main
import "fmt"
func main() {
i := 20
i++
//++i //这个也是错的, 语义更加明确
//fmt.Println("i:", i++) //这是错误的,不允许和其他代码放在一起,必须单独一行
fmt.Println("i:", i)
}
3. 指针
package main
import "fmt"
func main() {
//go语义也有指针
//结构体成员调用时: c语言: ptr->name go语言: ptr.name
//go语言在使用指针时,会使用内部的垃圾回收机制(gc : garbage collector),开发人员不需要手动释放内存
//c语言不允许返回栈上的指针,go语言可以返回栈上的指针,程序会在编译的时候就确定了变量的分配位置:
//编译的时候,如果发现有必要的话,就将变量分配到堆上
name := "lily"
ptr := &name
fmt.Println("name:", *ptr)
fmt.Println("name ptr:", ptr)
//02-使用new关键字定义
name2Ptr := new(string)
*name2Ptr = "Duke"
fmt.Println("name2:", *name2Ptr)
fmt.Println("name2 ptr:", name2Ptr)
//可以返回栈上的指针,编译器在编译程序时,会自动判断这段代码,将city变量分配在堆上
res := testPtr()
fmt.Println("res city :", *res, ", address:", res)
//空指针,在c语言: null, c++: nullptr,go: nil
//if两端不用加()
//即使有一行代码,也必须使用{}
if res == nil {
fmt.Println("res 是空,nil")
} else {
fmt.Println("res 是非空")
}
}
//定义一个函数,返回一个string类型的指针, go语言返回写在参数列表后面
func testPtr() *string {
city := "深圳"
ptr := &city
return ptr
}
4. 不支持的语法汇总
- 自增--i, ++i不支持
- 不支持地址加减
- 不支持三目运算符 ? :
- 只有false才能代码逻辑假,数字0和nil不能(只有false/true才能表示逻辑真假,数字不能代表逻辑值)
package main
import "fmt"
func main() {
//if 0 {
// fmt.Println("hello")
//}
//if nil {
// fmt.Println("hello")
//}
if true {
fmt.Println("hello")
}
//a, b := 1, 2
//x := a > b ? 0:-1
}