go struct 结构体
来源:原创
时间:2019-03-06
作者:脚本小站
分类:GoLang
结构体定义与赋值:
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
// 初始化并赋值,且每个元素都要赋值
var s1 Student = Student{1, "aaa", 'm', 18, "bbbbbb"}
fmt.Println(s1)
// 指定成员赋值,其他的成员为0
s2 := Student{name: "ddd", addr: "dedede"}
fmt.Println(s2)
}指针结构体:
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
// 定义个指针,值为取地址的结构体
var s1 *Student = &Student{1, "aaa", 'm', 18, "bbbbbb"}
fmt.Println(s1)
s2 := &Student{name: "ddd", addr: "dedede"}
fmt.Println(s2)
}结构体的使用:
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
var s Student
s.id = 1
s.name = "hello"
s.sex = 'm'
s.age = 20
s.addr = "hhhhhhh"
fmt.Println(s)
}指针结构体:
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
var s Student
var p *Student
p = &s
// 通过指针操作成员,p.id 和 (*p).id
p.id = 1
(*p).name = "haha"
p.sex = 'm'
p.age = 18
p.addr = "demo"
fmt.Println(p)
// 通过new()来申请指针结构体,new()返回的是一个内存地址
p1 := new(Student)
p1.name = "haha"
p1.sex = 'm'
p1.age = 18
p1.addr = "demo"
fmt.Println(p1)
}结构体比较:
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
// 结构体比较
var s1 Student = Student{1, "aaa", 'm', 18, "bbb"}
var s2 Student = Student{1, "aaa", 'm', 18, "bbb"}
var s3 Student = Student{1, "aaa", 'm', 18, "ccc"}
fmt.Println(s1 == s2) // true
fmt.Println(s2 == s3) // false
// 相同结构体可以赋值
var temp Student
temp = s3
fmt.Println(temp)
}结构体做函数参数:值传递
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func demo(s Student) {
s.id = 666
fmt.Println(s)
}
func main() {
var s1 Student = Student{1, "aaa", 'm', 18, "bbb"}
demo(s1)
fmt.Println(s1)
}结构体做函数参数:引用传递
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
// 形参指针
func demo(s *Student) {
s.id = 666
fmt.Println(s)
}
func main() {
var s1 Student = Student{1, "aaa", 'm', 18, "bbb"}
demo(&s1) // 引用传递,地址传递
fmt.Println(s1)
}可见性:结构体、函数名、类型名首字母必须要大写才能被其他包调用,如果首字母小写只能在同一个包中使用。
