دریابید که چگونه از افعال قالب بندی رشته ای استفاده کنید و کدام توابع Go از آنها پشتیبانی می کنند.
همانطور که کد Go را می نویسید، قالب بندی رشته ای را در بسیاری از موقعیت ها بسیار مفید خواهید یافت. ممکن است ورودیها را تجزیه کنید یا خروجیهای پیچیدهتری نسبت به الحاق ساده ایجاد کنید. شما ممکن است با انواعی غیر از رشته های ساده کار کنید.
قالب بندی رشته در Go از فرآیند و نحو آشنای تابع printf استفاده می کند که زبان های جاوا تا Haskell نیز از آن استفاده می کنند.
Go روش های مختلفی را برای قالب بندی رشته ها در بسته fmt ارائه می دهد. بسته به عملکرد یا ورودی هایی که می خواهید قالب بندی کنید، می توانید از توابع و افعال برای قالب بندی رشته استفاده کنید.
قالب بندی رشته در Go
توابع موجود در بسته fmt مشابه تابعهای مشابه هستند، مانند تابع printf در bash یا C. Go افعال قالببندی خود را از C مشتق میکند.
شما از افعال قالببندی رشتهای به عنوان مکاننما برای مقادیر متغیر خود در یک رشته حاوی استفاده میکنید. سپس میتوانید آن رشته قالببندی را به تابعی مانند Printf به همراه مقادیر مربوط به آن مکانها ارسال کنید.
شما نمی توانید از افعال قالب بندی رشته ای با متدهای Print و Println استفاده کنید. می توانید از آنها با روش هایی مانند Printf و Sprintf استفاده کنید.
fmt.Println("This is a test %v", 90)
fmt.Printf("This is a test %v", 90)
فعل %v هر مقداری را در قالب پیش فرض خود چاپ می کند. متد Println افعال را نمی شناسد و هر آرگومان دریافتی را چاپ می کند. توابع Printf و Sprintf هر دو اولین آرگومان رشته ای را که به آنها ارسال می کنید فرمت می کنند.
توابع قالب بندی رشته در بسته fmt
قالب بندی رشته ها در زبان برنامه نویسی Go مستلزم استفاده از تابع قالب بندی رشته و فعل است. تابع رشته قالببندی شده را برمیگرداند و افعال مکانهایی برای ورودیهای رشته هستند.
متد Printf ورودی را با توجه به فرمت مشخص کننده فرمت می کند و تعداد بایت ها یا خطاهای نوشته شده را برمی گرداند.
fmt.Printf("This is a test %v", 90)
به طور معمول، هنگام استفاده از روش Printf، دیگر نگران خطاها نخواهید بود.
متد Sprintf بر اساس فرمت مشخص شده فرمت می کند و نتیجه را به صورت رشته ای برمی گرداند.
var result = fmt.Sprintf("This is a test %v", 90)
متد Fprintf رشته را قالب بندی می کند و آن را در یک Writer می نویسد (روش هایی که رابط io.Writer را پیاده سازی می کنند)
// write data to standard output
result, err = fmt.Fprintf(writer, "This is a test %v", 90)
روش Fscanf از یک خواننده اسکن می کند و طبق فرمت مشخص شده فرمت می کند.
var take string
// read data from the given string
readString := strings.NewReader("This is a test")
read, err := fmt.Fscanf(reader, "%v", &take)
در این حالت، Fscanf رشته را از خواننده به متغیر take رمزگشایی می کند و متغیر read نتیجه قالب را نگه می دارد.
افعال قالب بندی رشته ای
Go افعال قالببندی بسیاری را ارائه میکند که میتوانید همراه با توابع قالببندی رشتهای از آنها استفاده کنید.
در مثالهای توابع قالببندی رشته، افعال کلی قالببندی رشته مانند فعل %v وجود دارد. میتوانید از افعال قالببندی رشتهای عمومی برای قالببندی هر نوع داده استفاده کنید.
میتوانید از %#v برای خروجی هر مقدار، %+v برای ساختارها، از %T برای نوع هر مقدار و از %% برای هیچ مقداری استفاده کنید.
type any struct {
name string
age int
isLoggedIn bool
}
var instance = any {
name: "John Doe",
age: 34,
isLoggedIn: true,
}
var result = fmt.Sprintf("This is a struct formatting example %+v", instance)
fmt.Println(result)
متغیر نتیجه رشته فرمت شده ساختار نمونه را نگه می دارد. اگر آن را چاپ کنید، باید چیزی شبیه به این باشد:
This is a struct formatting example {name:John Doe age:34 isLoggedIn:true}
افعالی برای قالب بندی انواع داده های بومی Go، از جمله کانال ها و اشاره گرها وجود دارد.
فعل
عملکرد
%t
بولین ها
%d
int، int8 و غیره
%d، %#x اگر با %#v چاپ شده باشد
uint، uint8 و غیره
% g
float32، complex64، و غیره
%s
رشته
٪پ
چان
٪پ
اشاره گر
باید مطمئن شوید که با افعال اشتباه نمی کنید زیرا آنها به حروف بزرگ و کوچک حساس هستند، مانند افعال chan و اشاره گر.
قالب بندی اعداد صحیح و شناورها
افعال قالب بندی رشته ای برای قالب بندی اعداد صحیح در پایه های مختلف وجود دارد. شما می توانید از هر یک از این افعال برای قالب بندی اعداد صحیح استفاده کنید
فعل
عملکرد
%b
پایه 2
%c
کاراکتری که با نقطه کد یونیکد مربوطه نشان داده می شود.
%d
پایه 10.
%o
پایه 8.
%O
پایه 8 با پیشوند 0o.
% q
یک کاراکتر تک نقل قول به معنای واقعی کلمه با دستور Go به راحتی فرار کرد.
٪ایکس
پایه 16، با حروف کوچک برای a-f.
٪ایکس
پایه 16، با حروف بزرگ برای A-F.
%U
فرمت یونیکد: U+1234; مانند “U+%04X”.
به عنوان مثال، می توانید یک عدد صحیح را با استفاده از %d فعل قالب بندی کنید:
var result = fmt.Sprintf("This is an integer formatting example %d", 90)
fmt.Println(result)
اینها افعالی برای قالب بندی اعداد ممیز شناور هستند.
فعل
عملکرد
%b
نماد علمی بدون اعشار با توان دو، به روش strconv. FormatFloat با فرمت ‘b’، به عنوان مثال. -123456p-78
%e
نماد علمی، به عنوان مثال -1.234456e+78
%E
نقطه اعشار اما بدون توان، به عنوان مثال، 123.456
% f
نقطه اعشار اما بدون توان، به عنوان مثال، 123.456
%F
مترادف %f.
% g
%e برای نماهای بزرگ، %f در غیر این صورت. دقت زیر
%G
%E برای نماهای بزرگ، %F در غیر این صورت
٪ایکس
نماد هگزادسیمال (با توان اعشاری دو توان)، به عنوان مثال، -0x1.23abcp+20.
٪ایکس
نماد هگزادسیمال با حروف بزرگ، به عنوان مثال. -0X1.23ABCP+20.
در اینجا نمونه ای از قالب بندی یک نقطه اعشار بدون توان با فعل %f آورده شده است.
var result = fmt.Sprintf("This is a floating point example %f", 432.9503)
fmt.Println(result)
اگر در مورد نوع آن مطمئن نیستید، همیشه می توانید از افعال عمومی استفاده کنید.
قالب بندی رشته ها و بایت ها
رشته ها و تکه هایی از انواع بایت در Go بسیار شبیه هستند. اینها پرچم هایی برای قالب بندی رشته ها و بایت ها هستند.
فعل
عملکرد
%s
بایت های تفسیر نشده رشته یا برش
% q
یک رشته دو نقل قول به طور ایمن با نحو Go فرار کرد
٪ایکس
پایه 16، حروف کوچک، دو کاراکتر در هر بایت
٪ایکس
پایه 16، حروف بزرگ، دو کاراکتر در هر بایت
در اینجا نمونه ای از قالب بندی یک رشته با فعل %s آمده است.
var score = "example"
var result = fmt.Sprintf("This is a string formatting example %s", score)
fmt.Println(result)
بسته fmt برای برنامه نویسی Go ضروری است
بسته fmt شامل بیشتر قابلیت هایی است که برای قالب بندی رشته ها نیاز دارید. Go همچنین یک بسته رشته برای دستکاری رشته و یک بسته log ارائه می دهد که می تواند رشته ها را برای ورود به سیستم قالب بندی کند.
بسته fmt دارای توابعی است که رابط های io.Writer و io.Reader را پیاده سازی می کند. آن را برای بسیاری از موارد استفاده مانند ساخت وب و برنامه های خط فرمان مفید خواهید یافت.