Go语言基础笔记(三)接口、值引用与指针引用、字符串

1、接口

package main

import "fmt"

/* 定义接口 */
type Phone interface {
	/* 方法名 返回值 */
	call()
}

type XiaoMiPhone struct {
	CPU     string
	Memory  string
	Camera  string
	Battery string
}

func (xiaomiPhone XiaoMiPhone) call() {
	fmt.Println("我是小米手机!")
}

type IPhone struct {
	CPU     string
	Memory  string
	Camera  string
	Battery string
}

func (iPhone IPhone) call() {
	fmt.Println("我是苹果手机!")
}

func main() {
	var phone Phone

	phone = new(XiaoMiPhone)
	phone.call()

	phone = new(IPhone)
	phone.call()
}

打印出来的效果:

Go语言基础笔记(三)接口、值引用与指针引用、字符串_第1张图片

2、值引用与指针引用

package main

import "fmt"

type Movie struct {
	Name   string
	Rating float64
}

// 给结构体 Movie 添加一个方法
// 指针引用
func (m *Movie) setMovieName(name string) string {
	m.Name = name
	return m.Name
}

func (m *Movie) getMovieRating() float64 {
	return m.Rating
}

// 指针引用
func (m *Movie) changeMovieRating(rating float64) {
	m.Rating = rating
	return
}

// 值引用
func (m Movie) changeMovieRatingByValueReference(rating float64) {
	m.Rating = rating
	return
}

func main() {
	movie := Movie{
		Name:   "flipped",
		Rating: 9.1,
	}
	//fmt.Println(movie.setMovieName("lie to me"))
	fmt.Println("初始得分:", movie.getMovieRating())
	movie.changeMovieRating(9.8)
	fmt.Println("通过指针引用修改得分后的结果:", movie.Rating)
	movie.changeMovieRatingByValueReference(9.3)
	fmt.Println("通过值引用修改得分后的结果:", movie.Rating)
}

打印出来的效果: 

Go语言基础笔记(三)接口、值引用与指针引用、字符串_第2张图片

指针引用可以改变结构体的值,而值引用不可以。

3、字符串

package main

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
)

func main() {
	//escapeCharacterStr()
	//splicingStr("我是", "好人")
	//mixedSplicingStr()
	//splicingDifferentTypeStr()
	//bufferStr()
	//analyzeString()
	//lowerString()
	//lookForString()
	//trimBlankSpaceInString()
	//replaceStr()
}

// 转义字符
func escapeCharacterStr() {
	s := "大家好马上开始换行\n现在进行换行\n\t制表符(tab)"
	fmt.Println(s)
}

// 拼接字符串
func splicingStr(a string, b string) {
	s := a + b
	fmt.Println(s)
}

// 复合赋值运算符 拼接 字符串
func mixedSplicingStr() {
	s := "你能听见我吗?"
	s += "\n是的,我可以"
	fmt.Println(s)
}

// 拼接不同类型的值 作为 字符串
func splicingDifferentTypeStr() {
	i := 1
	s := " egg"
	intToString := strconv.Itoa(i)
	breakfast := intToString + s
	fmt.Println(breakfast)
}

// 缓冲区拼接字符串
func bufferStr() {
	var buffer bytes.Buffer
	for i := 0; i < 500; i++ {
		buffer.WriteString("z")
	}
	fmt.Println(buffer.String())
}

// 分析字符串
func analyzeString() {
	s := "hello"
	fmt.Println("h十进制:", s[0])
	fmt.Printf("h二进制:%b\n", s[0])
	fmt.Printf("h:%q\n", s[0])
}

// 字符串小写
func lowerString() {
	fmt.Println(strings.ToLower("VERY IMPORTANT MESSAGE"))
}

// 在字符串中查找
func lookForString() {
	fmt.Println(strings.Index("playground", "ground"))
	fmt.Println(strings.Index("moon", "aer"))
}

// 删除字符串开头和末尾的空格
func trimBlankSpaceInString() {
	str1 := " clear all space "
	fmt.Println(str1)
	str1 = strings.TrimSpace(str1)
	fmt.Println(str1)
}

func replaceStr() {
	str1 := "我是好好的人"
	fmt.Println(str1)
	//四个参数:源字符串,被替换的内容,替换的内容,替换次数
	str1 = strings.Replace(str1, "好", "坏", 2)
	fmt.Println(str1)
}

你可能感兴趣的:(go语言学习,golang,开发语言,后端)